import { createApp } from "vue";
import pinia from "@/store/index";
import App from "@/App.vue";
import router from "@/router";
import localConfig from "@/config";
import theme from "@/config/theme";
import Local from "tools-utils/storage";
import "uno.css";
import ElementPlus from "element-plus";
import "element-plus/dist/index.css";
import "@/style/index.scss";
import AvueTable from "avue-table";
import axios from "@/utils/axios";
import ElMessage from "@/utils/el-message";
import ElLoading from "@/utils/el-loading";
import Directive from "@/directive/index";
import ElementPlusTheme from "element-plus-theme";
import { NextLoading } from "@/utils/loading";
import "@wangeditor/editor/dist/css/style.css";
import { setupMessageCenter } from "@/core/registerMessageHandlers";
// 创建 Vue 应用实例
const app = createApp(App);

// 全屏 loading 动画开始执行
if (window.nextLoading === undefined) NextLoading.start();

// 注册 Pinia 状态管理
app.use(pinia);
// 注册路由
app.use(router);
// 注册 ElementPlus 组件库
app.use(ElementPlus);
// 注册 ElementPlusTheme 主题插件
app.use(ElementPlusTheme, {
  isDark: Local.get("isDark") ?? localConfig.isDark,
  theme: theme || {},
});
// 注册 element-plus 消息提示
app.use(ElMessage);
// 注册 element-plus 加载提示
app.use(ElLoading);
// 注册 Avue 、 BaseSearch、 BaseCard 组件
app.use(AvueTable, {
  // axios 实例
  axios,
  // 搜索全局配置
  searchConfig: {},
  // avue 全局配置
  avueOption: {
    crudOption: {
      // 是否显示 header 表格操作栏
      header: false,
      // 更新按钮文案
      updateBtnText: "保存",
      // 编辑按钮文案
      editBtnText: "编辑",
      // 删除按钮文案
      delBtnText: "删除",
      // 卡片模式切换按钮
      gridBtn: false,
      // 表格搜索显隐按钮
      searchShowBtn: false,
      // 表格列操作按钮
      columnBtn: false,
      // 表格高度
      height: "auto",
      // 表格高度差（主要用于减去其他部分让表格高度自适应）
      calcHeight: 145,
      // 列居中
      align: "center",
      // 搜索回车
      searchEnter: true,
      // 菜单表头的对齐方式
      menuHeaderAlign: "left",
      // 菜单对齐方式
      menuAlign: "left",
    },
  },
});
// 注册 自定义 指令
app.use(Directive);

// // 1) 仅注册一次（不会立刻发起连接）
// setupMessageCenter(app);

// // 2) 启动时，如果本地有 token，pinia 内部会 setAuthToken + ensureConnected
// const userStore = useUserInfoStore(pinia);
// userStore.RestoreSessionAndWS();

// 挂载应用
app.mount("#app");
